<div class="infoSection">
	<p>
		Pr&aacute;ctica realizada por:
		<ul>
			<li>Sergio Mart&iacute;nez-Losa</li>
			<li>Alex del Ruste</li>
			<li>Ignacio Elorriaga</li>
		</ul>
		<h1>&Iacute;NDICE</h1>
		<a href="#objetivos">Objetivos</a>
		<a href="#documentacion">Documentaci&oacute;n</a>
		<a href="#requisitos">Requisitos</a>
		<a href="#RequisitosFuncionales">Requisitos Funcionales</a>
		<a href="#RequisitosNoFuncionales">Requisitos No Funcionales</a>
		<a href="#arquitectura">Arquitectura</a>
		
		<h1>Objetivos de la pr&aacute;ctica</h1>
		<a name="objetivos"></a>
		La pr&aacute;ctica final se ha realizado para dar soluci&oacute;n a un planteamiento en el cual donde se necesitaba mostrar los datos meteorol&oacute;gicos de ciudades de varios pa&iacute;ses as&iacute; como una hist&oacute;rico de los resultados clim&aacute;ticos de las ciudades consultadas.
		
		<h1>Documentaci&oacute;n</h1>
		<a name="documentacion"></a>
		<p>
			Se ha dejado la documentaci&oacute;n de los m&eacute;todos de la practica en el subdirectorio <a href="http://10.1.1.111:8080/Task_Est_Meteorologica/javadoc/index.html">javadoc</a>.
			<br/>
			Y la memoria de la pr&aacute;ctica en el directorio <a href="http://10.1.1.111:8080/Task_Est_Meteorologica/doc/TecAvan-Memoria.pdf">doc</a>.
			<br/>
			El c&oacute;digo fuente se puede consultar en el subdirectorio <a href="http://10.1.1.111:8080/Task_Est_Meteorologica/src/">src</a>.
			<br/>
			El LOG de los procesos que est&aacute;n pasando es: <a href="http://10.1.1.111:8080/Task_Est_Meteorologica/log/log.html">Log eventos</a>.
		</p>
		
		<h1>Requisitos de la practica</h1>
		<a name="requisitos"></a>
		<h2>Requisitos funcionales</h2>
		<a name="RequisitosFuncionales"></a>
		<ul>
			<li>Emplear una base de datos</li>
			<li>Implementaci&oacute;n de Spring</li>
			<li>Implementaci&oacute;n de un Webservice</li>
			<li>Empleo de Ajax</li>
			<li>Empleo de JSTL</li>
		</ul>
		<h2>Requisitos no funcionales</h2>
		<a name="RequisitosNoFuncionales"></a>
		<ul>
			<li>Persistencia de los datos</li>
			<li>Fiabilidad de la aplicaci&oacute;n</li>
			<li>Multiplataforma.</li>
		</ul>
		<h1>Arquitectura del proyecto</h1>
		<a name="arquitectura"></a>
		El proyecto se ha creado mediante una web para dar soluci&oacute;n al requisito de multifuncionalidad y poder implementar un Webservice.
		 Se ha empleado el patr&oacute;n MVC para estructurar el proyecto:
		<ul>
			<li>La capa del modelo son los propios datos en formato Bean para ser insertados mediante el patr&oacute;n Abstract Factory en formato DAO (Data Access Object) que se obtienen del webservice meteorol&oacute;gico</li>
			<li>el controlador de encarga de parsear los datos y comunicar con la vista (Spring y controladores de webservices) </li>
			<li>La vista son los JSPs que muestran la informaci&oacute;n (con estilos).</li>
		</ul>
		Las opciones en la navegabilidad se dispondr&aacute;n en forma de men&uacute;.
		Para poder dar soluci&oacute;n a los requisitos se ha empleado:
		<ul>
			<li>Para la base de datos MySQL y en su acceso se realiza mediante el patr&oacute;n DAO y JDBC. </li>
			<li>Como controlador de la aplicaci&oacute;n se ha usado Spring para manejar las peticiones de los jsp.</li>
			<li>Para la implementaci&oacute;n del WebService se ha empleado el servlet AXIS en su versi&oacute;n 1.4 y se ha creado un WebService propio para el listado de los pa&iacute;ses, ciudades y listado de los tiempos consultados para una ciudad. Adem&aacute;s de consumir un Webservice p&uacute;blico que obtiene los datos meteorol&oacute;gicos.</li>
			<li>En la parte visual se ha implementado con JSP, para que el navegador web mostrara los datos se ha empleado HTML5, adem&aacute;s se ha usado sobre los men&uacute;s AJAX, mediante el framework de jQuery. </li>
			<li>Finalmente para el listado de los datos obtenidos de base de datos se ha empleado el core de JSTL.</li>
		</ul>
		Al ser una aplicaci&oacute;n web se ha empleado como contenedor Apache Tomcat 7.0.3
	</p>
	<p>
	Los datos meteorol&oacute;gicos se obtienen por medio de un webservice publico disponible en: <a href="http://www.webservicex.net/globalweather.asmx?WSDL">WSDL de webservicex.net</a>, por otra parte generamos la clase proxy que se comunicar&aacute; con &eacute;l mediante AXIS, dicha tecnolog&iacute;a es capaz de comportarse en s&iacute; como un "servidor de aplicaciones" en el cual se puede deplegar uno o mas webservices pero en nuestro caso utilizaremos tomcat para ello.
	</p>
	<p>
	Por otro lado hemos usado el framework de Spring para manejar la configuraci&oacute;n de mostrado de la informaci&oacute;n y las peticiones que realizamos al webservice. 
	</p>
	<p>
	Tambi&eacute;n hemos usado JSTL para mostrar la informaci&oacute;n en los JSP, y adem&aacute;s hemos usado componentes de HTML5 para refrescar el contenido de la p&aacute;gina, en concreto la etiqueta &lt;section&gt;.
	</p>
	<p>
	Como hemos apuntado antes, la p&aacute;gina se basa en archivos JSP los cuales muestran el contenido din&aacute;micamente en funci&oacute;n de los datos que se obtienen.
	</p>
	<p>
	Disponemos de una base de datos la cual almacena los datos que se consultan desde el webservice, realizamos esta acci&oacute;n para alimentar el hist&oacute;rico de datos para que el usuario pueda consultarlo de manera posterior. Para el correcto almacenamiento se ha tenido que parsear el XML que devuelve este Webservice a un Bean, sus XML son:
	<code>
		getWeatherByCity(country,city):<br/>
			&lt;?xml version="1.0" encoding="utf-16"?&gt;
			&lt;CurrentWeather&gt;
			&lt;Location&gt;Zaragoza / Aeropuerto, Spain (LEZG) 41-40N 001-01W 258M&lt;/Location&gt;
			&lt;Time&gt;Dec 04, 2012 - 06:30 AM EST / 2012.12.04 1130 UTC&lt;/Time&gt;
			&lt;Wind&gt; from the NW (310 degrees) at 22 MPH (19 KT):0&lt;/Wind&gt;
			&lt;Visibility&gt; greater than 7 mile(s):0&lt;/Visibility&gt;
			&lt;SkyConditions&gt; partly cloudy&lt;/SkyConditions&gt;
			&lt;Temperature&gt; 53 F (12 C)&lt;/Temperature&gt;
			&lt;DewPoint&gt; 41 F (5 C)&lt;/DewPoint&gt;
			&lt;RelativeHumidity&gt; 62%&lt;/RelativeHumidity&gt;
			&lt;Pressure&gt; 30.12 in. Hg (1020 hPa)&lt;/Pressure&gt;
			&lt;Status&gt;Success&lt;/Status&gt;
			&lt;/CurrentWeather&gt;
		<br/>
		getCitiesByCountry(country)<br/>
			&lt;NewDataSet&gt;
			&lt;Table&gt;
			&lt;Country&gt;Spain&lt;/Country&gt;
			&lt;City&gt;Fuerteventura/Aeropuerto&lt;/City&gt;
			&lt;/Table&gt;
			&lt;Table&gt;
			&lt;Country&gt;Spain&lt;/Country&gt;
			&lt;City&gt;Hierro/Aeropuerto &lt;/City&gt;
			&lt;/Table&gt;
			...
			&lt;/NewDataSet&gt;
	</code>
	</p>
	<p>
	El proceso de consulta meteorol&oacute;gica y almacenamiento de los datos puede representarse con un diagrama de secuencia, d&oacute;nde tambi&eacute;n se explica de manera esquem&aacute;tica c&oacute;mo se muestran los datos en la web, dicho diagrama de secuencia es el siguiente:
	</p>
	<p>
	<img src="images/diagama.png" alt="Diagrama de Secuencia."/>
	</p>
	<p>
	El diagrama de secuencia que hemos descrito podemos explicarlo como una serie de acciones que se ejecutan en el tiempo:
	</p>
	<ol>
		<li>En el JSP se realiza la llamada al contenedor de Spring.</li>
		<li>El contenedor de Spring realiza la llamada al webservice para obtener los datos y lo devuelve como respuesta al contenedor de Spring.</li>
		<li>Los datos se parsean y se env&iacute;an a la base de datos por medio de un DAO para conectar a dicha base de datos local y se guardan los datos, nos devolver&aacute; una respuesta TRUE si los datos han sido guardados correctamente.</li>
		<li>El contenedor de Spring env&iacute;a los datos a la vista JSP para mostrarlos al usuario.</li>
	</ol>
</div>
